package cn.tx.config.zookeeper;

import lombok.extern.slf4j.Slf4j;
import org.apache.curator.framework.CuratorFramework;
import org.apache.curator.framework.recipes.cache.*;
import org.springframework.boot.ApplicationArguments;
import org.springframework.boot.ApplicationRunner;
import org.springframework.stereotype.Component;

import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;

/**
 * @author: 可乐加糖
 * @create: 2023-02-28 11:16
 * @Description: 节点数据监听
 */
@Component
@Slf4j
public class ZookListening implements ApplicationRunner {
    @Override
    public void run(ApplicationArguments args) throws Exception {
        log.info("Node data is changed, new data: {}","The code is commented out because zk is not started!");
    }

//    @Override
//    public void run(ApplicationArguments args) throws Exception {
//        /**
//         * 在注册监听器的时候，如果传入此参数，当事件触发时，逻辑由线程池处理
//         */
//        ExecutorService pool = Executors.newFixedThreadPool(2);
//        /**
//         * 监听数据节点的变化情况
//         */
//        final NodeCache nodeCache = new NodeCache(ZookeeperConfig.getClient(), "/lanxi", false);
//        nodeCache.start(true);
//        nodeCache.getListenable().addListener(
//                /**
//                 * 此方法只监听创建节点和更新节点，在删除节点是不触发此操作
//                 */
//                new NodeCacheListener() {
//                    @Override
//                    public void nodeChanged() throws Exception {
//                        log.info("Node data is changed, new data: {}" ,
//                                new String(nodeCache.getCurrentData().getData()));
//                    }
//                },
//                pool
//        );
//
//
//        /**
//         * 监听子节点的变化情况
//         *
//         * 建立一个PathChildrenCache的缓存，第三个参数为是否接收节点数据内容，如果为 false 则不接受
//         */
//        final PathChildrenCache childrenCache = new PathChildrenCache(ZookeeperConfig.getClient(), "/llx", true);
//        //在初始时就进行缓存监听
//        childrenCache.start(PathChildrenCache.StartMode.POST_INITIALIZED_EVENT);
//        childrenCache.getListenable().addListener(
//                new PathChildrenCacheListener() {
//                    /**
//                     * 监听节点的变更。 新建、修改、删除
//                     * @param client
//                     * @param event
//                     * @throws Exception
//                     */
//                    @Override
//                    public void childEvent(CuratorFramework client, PathChildrenCacheEvent event)
//                            throws Exception {
//                        switch (event.getType()) {
//                            case CHILD_ADDED:
//                                System.out.println("CHILD_ADDED: " + event.getData().getPath());
//                                break;
//                            case CHILD_REMOVED:
//                                System.out.println("CHILD_REMOVED: " + event.getData().getPath());
//                                break;
//                            case CHILD_UPDATED:
//                                System.out.println("CHILD_UPDATED: " + event.getData().getPath());
//                                break;
//                            default:
//                                break;
//                        }
//                    }
//                },
//                pool
//        );
//
//    }
}

